查看原文
其他

别搞HA,别搞HA,别搞HA! 续

digoal PostgreSQL码农集散地
2024-09-30

文中参考文档可点击阅读原文打开, 推荐《最好的PostgreSQL学习镜像》。本公众号持续发布AI、PostgreSQL、DuckDB、开源、观察感悟等相关文章. 


别搞HA,别搞HA,别搞HA! 续

背景

续 这一篇 别搞HA,别搞HA,别搞HA!

我想纠正一个观点, 数据库不是一定要搞主从HA的, 数据库不是一定要备份的, 数据库不是一定要搞双盘RAID1的. 搞主从HA之前先问问为什么吧?

搞主从HA不就是要解决0丢失和快速崩溃恢复吗?咱直奔主题,别搞错了,HA不是目的,它只是手段 !

1、没有HA如何做到0丢失?

0丢失很简单,不需要高端存储, 云盘的多副本技术随便就可以做到0丢失,还需要啥HA?实在很重要的数据搞个跨机房或者跨地域容灾实例防天灾。

云盘和本地盘不同, 云盘通常本身就是多副本的, 可靠性和可用性比本地盘高N个级别. 而且云盘可能也支持跨机房容灾能力(如果有的话, 可以考虑使用这个能力来实现跨机房HA). 云盘的弱点之一是单次IO的响应时间比本地盘高, 不过PG的大部分请求是异步IO不用担心, 也可以使用分组提交或异步提交来解决这个性能问题. 另一个弱点可能是云盘的吞吐, 和ECS规格以及云盘的规格相关, 想大也能做大.

2、没有HA如何做到瞬间崩溃恢复?

瞬间崩溃恢复技术确实不简单,能做到任何时候崩溃恢复都无需等待,有这样的技术吗?沃特?还真做到了!PolarDB lazy recovery, 其实就是读page时同时读必要的wal进行恢复, 所以崩溃后数据库立即就对用户可用.

如果是开源PostgreSQL呢? 也不用太担心. 除非

  • 你的shared buffer配置得特别大,
  • 并且里面很多很多脏数据未持久化(基本上只有可能出现在业务高峰、并且 bgwrite 参数没配置好),
  • 并且checkpoint周期特别长,
  • 并且checkpoint target设置得很大(接近1).

这么多的并且合在一起, 概率就大大下降了. 所以即使是PG, 大概率崩溃恢复也是很快的.

云上使用的数据库, 大多数时候不需要HA

数据库流复制那种HA弊端太多, 毛病实在太多。老司机都难免翻车:

  • 成本至少翻一倍,
  • 异步的切来切去丢数据\脑裂,
  • 同步的性能损耗大\故障点增加\成本翻几倍,
  • 功能损失让人抓狂(逻辑槽支持不好,啥都要写wal等),
  • 版本管理插件管理配置管理更加复杂坑更多等等

我推荐的省钱省事架构:

  • 主实例: 单机ecs + essd云盘 + ext4   (有容灾实例时, 不需要备份; 没有容灾实例时备份: 云盘快照+归档)
  • 可选 跨机房备用实例(异步流复制): 单机ecs + essd云盘 + ext4
  • 建议选择 跨地域容灾备份实例(异步流复制): 单机ecs + essd云盘 + zfs  (备份: zfs快照+归档)

pic

主实例故障怎么办?

  • 重启数据库或者重启ECS就可以了, 放心, 快得很. 比起流复制HA带来的弊端, ECS重启一次比切换慢个十几秒算啥?  故障又不是高频动作.

机房故障怎么办?

  • 毕竟机房不是三天两头坏, 自动或人为切换都行. 根据你自己的业务对外的可用性承诺来判断, 如果本身要求不高的确认机房挂了一时半会起不来, 再考虑切换.

如果是可用性要求特别高的业务, 面对机房故障, 就需要考虑跨机房高可用方案了, 这方面的产品特别多, 例如

  • 中启乘数的clup, https://gitee.com/csudata/clup-community  ;   https://www.csudata.com/
  • kubeblocks: https://github.com/apecloud/kubeblocks

地震怎么办?

  • 确认无力回天了的话, 可以人为切到容灾实例, 毕竟地震概率很小.

升版本怎么办?

  • 小版本升级, 安装好软件重启就可以, 快得很. 安全起见, 可以在升级前做个云盘快照.
  • 大版本升级, 本来就需要用备实例来演练, 在异地容灾的机器上克隆zfs快照进行演练, 成本低到不敢想象.

一些最佳实践文章:

  • 《PostgreSQL 12 on 阿里云ecs 本地ssd VS essd pl3性能 - 含fio,fsync test,pgbench test,优缺点、云盘PG内核优化建议》
  • 《PostgreSQL 11 1万亿 tpcb 性能测试 on 阿里云ECS + ESSD + zfs/lvm2条带 + block_size=32K》
  • 《PostgreSQL 10 + PostGIS + Sharding(pg_pathman) + MySQL(fdw外部表) on ECS 部署指南(适合新用户) - 珍藏级》
  • 《PostgreSQL on ECS多云盘的部署、快照备份和恢复》
  • 《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)验证 - recovery test script for zfs snapshot clone + postgresql stream replication + archive》
  • 《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)双机HA与块级备份部署》
  • 《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)单个数据库采用多个zfs卷(如表空间)时如何一致性备份》
  • 《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)备份集有效性自动校验》
  • 《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)方案与实战》
  • 《PostgreSQL 快速大版本升级多种方案 - 含重点介绍fast & safe upgrade to PostgreSQL 9.4 use pg_upgrade & zfs》
  • 《如何创建RDS PG 的秒级 flashback闪回实例, 实时容灾实例 - zfs - snapshot - clone - standby - compress》
  • 《ZFS PostgreSQL 调优》


本期彩蛋 - 开源Clup: PostgreSQL&PolarDB集群管理软件

clup由《PostgreSQL从小工到专家》作者唐成乘数科技出品, 包含开源版本和企业版本, 是非常成熟的PostgreSQL&PolarDB集群管理软件. 

官网: https://www.csudata.com/clup

开源项目地址: https://gitee.com/csudata

使用CLup可以轻松管理几十套至上百套PostgreSQL、PolarDB高可用的数据库集群,发生故障自动切换,不影响生产系统的运行。故障切换后有详细的故障日志,方便定位故障原因,还可以手工一键切换。CLup还提供了数据库的一些基本监控和TOP SQL的监控,CLup后续版本还会增加更多的功能。

  • 管理基于PostgreSQL流复制的集群

  • 管理基于共享存储的PolarDB集群

  • 产品优势

推荐2本新书:

文章中的参考文档请点击阅读原文获得. 


欢迎关注我的github (https://github.com/digoal/blog) , 及视频号:


个人观点,仅供参考
继续滑动看下一个
PostgreSQL码农集散地
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存